home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / KEYWITCH / KW_S200.LZH / w19etc.s < prev    next >
Text File  |  1995-03-20  |  5KB  |  237 lines

  1.     .include    w01dos.mac
  2.     .include    w03const.mac
  3.     .include    w04macro.mac
  4.     .include    w05reloc.mac
  5.  
  6.     .text
  7.     .even
  8.  
  9. ********************************
  10. *文字列を小文字化する
  11. *<a0.l:小文字化する文字列
  12. *<a1.l:結果を入れるワーク
  13. *?d0/a0-a1
  14. to_lower_neg::
  15.     cmp.b    #$A0,d0
  16.     blo    to_lower_twin
  17.     cmp.b    #$E0,d0
  18.     blo    to_lower_loop
  19. to_lower_twin::
  20.     move.b    d0,(a1)+
  21.     move.b    (a0)+,d0
  22. to_lower_loop::
  23.     move.b    d0,(a1)+
  24. to_lower::
  25.     move.b    (a0)+,d0
  26.     beq    to_lower_end
  27.     bmi    to_lower_neg
  28.     cmp.b    #'A',d0
  29.     blo    to_lower_loop
  30.     cmp.b    #'Z',d0
  31.     bhi    to_lower_loop
  32.     or.b    #$20,d0
  33.     bra    to_lower_loop
  34.  
  35. to_lower_end::
  36.     move.b    d0,(a1)+
  37.     rts
  38.  
  39. ********************************
  40. *プログラムのテーブルを移動する
  41. *<a0.l:テーブルの先頭アドレス
  42. *<a5.l:コピー先の先頭アドレス
  43. *>a5.l:コピー先のエンドコードの直後のアドレス
  44. *?d0/a0/a5
  45. move_prog_table::
  46.     move.w    (a0)+,d0
  47.     beq    move_prog_table_end
  48. move_prog_table_loop::
  49.     move.w    d0,(a5)+
  50.     moveq.l    #(24-2)/2-1,d0
  51. move_prog_table_copy::
  52.     move.w    (a0)+,(a5)+
  53.     dbra    d0,move_prog_table_copy
  54.     move.w    (a0)+,d0
  55.     bne    move_prog_table_loop
  56. move_prog_table_end::
  57.     move.w    d0,(a5)+
  58.     rts
  59.  
  60. ********************************
  61. *条件付きのテーブルを移動する
  62. *<a0.l:テーブルの先頭アドレス
  63. *<a5.l:コピー先の先頭アドレス
  64. *>a5.l:コピー先のエンドコードの直後のアドレス
  65. *?d0/a0/a5
  66. move_table::
  67.     bsr    get_table_size
  68. move_table_loop::
  69.     move.w    (a0)+,(a5)+
  70.     dbra    d0,move_table_loop
  71.     rts
  72.  
  73. ********************************
  74. *テーブルの並びのサイズを求める
  75. *<a0.l:テーブルの並びの先頭アドレス
  76. *>d0.l:テーブルの並びのワード数(末尾の-1.wの分を含まない)
  77. *>z:テーブルがある=0/ない=1
  78. get_table_size::
  79.     move.l    a0,-(sp)
  80.     move.w    (a0),d0            *データサイズ
  81.     bmi    get_table_size_end
  82. get_table_size_loop::
  83.     lea.l    2+44(a0,d0.w),a0    *次のテーブルの先頭アドレス
  84.     move.w    (a0),d0            *データサイズ
  85.     bpl    get_table_size_loop
  86. get_table_size_end::
  87.     move.l    a0,d0
  88.     movea.l    (sp)+,a0
  89.     sub.l    a0,d0
  90.     lsr.l    #1,d0
  91.     rts
  92.  
  93. ********************************
  94. *keep_tail以降にテーブルを詰める
  95. *  スーパーバイザーモードで呼び出すこと。
  96. *<a6.l:base
  97. *>a5.l:常駐部分の末尾のアドレス
  98. *?d0-d4/a0-a1/a5
  99. trans_all::
  100.     lea.l    (keep_tail)r,a5        *転送先の先頭アドレス
  101.     di
  102.     lea.l    (prog_table_work)r,a0    *プログラムのテーブル
  103.     move.l    a5,(prog_table)r    *詰めた場合のアドレス
  104.     bsr    move_prog_table        *転送する
  105.     ei
  106.     lea.l    (table_list)r,a1
  107.     move.l    (a1)+,d0
  108. trans_all_loop::
  109.     movea.l    d0,a0
  110.     di
  111.     move.w    (a1)+,d0
  112.     move.l    a5,(a6,d0.w)        *詰めた場合のアドレス
  113.     bsr    move_table        *転送する
  114.     ei
  115.     move.l    (a1)+,d0
  116.     bne    trans_all_loop
  117.     move.l    a4,-(sp)
  118.     movea.l    a6,a4
  119.     bsr    trans_tables2
  120.     movea.l    (sp)+,a4
  121. *キーボード回りを初期化する
  122.     move.b    LEDSNS.w,d1        *LEDの状態
  123.     bra    _key_init        *スーパーバイザーモードで呼び出す
  124.  
  125. table_list::
  126.     .dc.l    prefix_table_work
  127.     .dc.w    prefix_table-base
  128.     .dc.l    assign_table_work
  129.     .dc.w    assign_table-base
  130.     .dc.l    suffix_table_work
  131.     .dc.w    suffix_table-base
  132.     .dc.l    char_table_work
  133.     .dc.w    char_table-base
  134.     .dc.l    meta_table_work
  135.     .dc.w    meta_table-base
  136.     .dc.l    break_table_work
  137.     .dc.w    break_table-base
  138.     .dc.l    copy_table_work
  139.     .dc.w    copy_table-base
  140.     .dc.l    den_table_work
  141.     .dc.w    den_table-base
  142.     .dc.l    int_table_work
  143.     .dc.w    int_table-base
  144.     .dc.l    lock_table_work
  145.     .dc.w    lock_table-base
  146.     .dc.l    reset_table_work
  147.     .dc.w    reset_table-base
  148.     .dc.l    sbreak_table_work
  149.     .dc.w    sbreak_table-base
  150.     .dc.l    unlock_table_work
  151.     .dc.w    unlock_table-base
  152.     .dc.l    0
  153.  
  154. ********************************
  155. *その他のテーブルの移動
  156. *<a4.l:転送先のbase
  157. *<a6.l:転送元のbase
  158. *?d0/a0
  159. trans_tables2::
  160.     move.l    a5,-(sp)
  161.     di
  162. *
  163.     move.l    (ask_flag_bits_work)r,ask_flag_bits-base(a4)
  164. *
  165.     lea.l    live_repeat_bits-base(a4),a5
  166.     lea.l    (live_repeat_bits_work)r,a0
  167.  .rept 16/4
  168.     move.l    (a0)+,(a5)+
  169.  .endm
  170. *
  171.     lea.l    kill_repeat_bits-base(a4),a5
  172.     lea.l    (kill_repeat_bits_work)r,a0
  173.  .rept 16/4
  174.     move.l    (a0)+,(a5)+
  175.  .endm
  176. *
  177.     lea.l    led_map-base(a4),a5
  178.     lea.l    (led_map_work)r,a0
  179.     moveq.l    #7-1,d0
  180. @@:    move.b    (a0)+,(a5)+
  181.     dbra    d0,@b
  182. *
  183.     lea.l    joy1_map-base(a4),a5
  184.     lea.l    (joy1_map_work)r,a0
  185.     moveq.l    #8-1,d0
  186. @@:    move.b    (a0)+,(a5)+
  187.     dbra    d0,@b
  188. *
  189.     lea.l    joy2_map-base(a4),a5
  190.     lea.l    (joy2_map_work)r,a0
  191.     moveq.l    #8-1,d0
  192. @@:    move.b    (a0)+,(a5)+
  193.     dbra    d0,@b
  194. *
  195.     ei
  196.     movea.l    (sp)+,a5
  197.     rts
  198.  
  199. ********************************
  200. *テーブル領域を転送してデバイス初期化終了
  201. *<a5.l:リクエストヘッダのアドレス
  202. *>d0.l:終了コード(=0)
  203. device_keeper::
  204.     movem.l    d1-d4/a0-a1/a4-a6,-(sp)
  205.     lea.l    base(pc),a6
  206.     movea.l    a5,a4            *リクエストヘッダのアドレス
  207.     bsr    trans_all        *テーブル領域を転送する
  208. *デバイス初期化終了
  209. *<a4.l:リクエストヘッダのアドレス
  210. *<a5.l:デバイスの末尾のアドレス
  211.     move.l    a5,14(a4)        *デバイスの末尾のアドレスを設定
  212.     move.l    a5,(device_end)r    *デバイスの末尾のアドレスを設定
  213.     movem.l    (sp)+,d1-d4/a0-a1/a4-a6
  214.     moveq.l    #0,d0
  215.     rts
  216.  
  217. ********************************
  218. *テーブル領域を転送して常駐終了
  219. *<a6.l:base
  220. *?d0-d4/a0-a1/a5
  221. keeper::
  222.     super
  223.     bsr    trans_all        *テーブル領域を転送する
  224.     user
  225. *常駐終了
  226. *<a5.l:常駐部分の末尾のアドレス
  227. *<a6.l:base
  228.     lea.l    (prog_head)r,a0
  229.     suba.l    a0,a5            *常駐部分のサイズ
  230.     clr.w    -(sp)
  231.     move.l    a5,-(sp)
  232.     DOS    _KEEPPR
  233.  
  234. ********************************
  235. *常駐部分の終わり
  236. keep_tail::
  237.